package com.jlf.core.engine.entity;

import com.jlf.core.engine.domain.SchemaIndexDO;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 数据库的索引
 *
 * @author wujr
 * 2023/7/14
 * @version 1.0
 * 【变更历史】
 * [wujr 2023/7/14 1.0 新增]
 */
@Getter
@Setter
public class MetaIndex {
    private String name;
    private boolean unique;
    private Short type;
    /**
     * 索引类别（可为 null）；TYPE 为 tableIndexStatistic 时索引类别为 null
     */
    private String qualifier;
    /**
     * 索引中的列序列号；TYPE 为 tableIndexStatistic 时该序列号为零
     */
    private Short position;
    /**
     * 列排序序列，”A” => 升序，”D” => 降序，如果排序序列不受支持，可能为 null；TYPE 为 tableIndexStatistic 时排序序列为 null
     */
    private String ascOrDesc;
    /**
     * TYPE 为 tableIndexStatistic 时，它是表中的行数；否则，它是索引中惟一值的数量。
     */
    private Integer cardinality;
    /**
     *  TYPE 为 tableIndexStatisic 时，它是用于表的页数，否则它是用于当前索引的页数。
     */
    private Integer pages;
    /**
     * 过滤器条件，如果有的话。（可能为 null）
     */
    private String filterCondition;

    private final List<String> columns = new ArrayList<>();

    public void addColumn(String column){
        this.columns.add(column);
    }

    public boolean isAltered(SchemaIndexDO schemaIndex){
        if (!schemaIndex.getUniqueness().equals(this.unique)){
            return true;
        }
        List<String> col = Arrays.asList(StringUtils.split(schemaIndex.getColumns(), ","));
        if (col.size() != this.columns.size()){
            return true;
        }
        for (int index = 0; index < this.columns.size(); ++ index){
            String c0 = this.columns.get(index);
            String c1 = col.get(index);
            if (!c0.equals(c1)){
                return true;
            }
        }
        return false;
    }
}
